﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SSE657.BahMap.Common;

namespace SSE657.BahMap.DataAccess
{
    public interface IBAHDataConnector
    {
        /// <summary>
        /// Returns an IEnumerable of all RateData for the specified PayGrade and dependents.
        /// </summary>
        IEnumerable<RateData> GetAreaRates(PayGrade grade, bool dependents);

        /// <summary>
        /// Returns the BAH rate for the specified PayGrade, dependents status, and ZIP code.
        /// </summary>
        double GetRate(PayGrade grade, bool dependents, int zipcode);

        /// <summary>
        /// Returns the BAH rate for the specified PayGrade, dependents status, and MHA.
        /// </summary>
        double GetRate(PayGrade grade, bool dependents, string MHA);

        /// <summary>
        /// Outputs the BAH rate for the specified PayGrade, dependents, and ZIP code, as well as the national min and max rate for the specified PayGrade and dependents.
        /// </summary>
        void GetRateAndRange(PayGrade grade,
            bool dependents,
            int zipcode,
            out double rate,
            out double min,
            out double max);

        /// <summary>
        /// Outputs the BAH rate for the specified PayGrade, dependents, and MHA, as well as the national min and max rate for the specified PayGrade and dependents.
        /// </summary>
        void GetRateAndRange(PayGrade grade,
            bool dependents,
            string mha,
            out double rate,
            out double min,
            out double max);

        /// <summary>
        /// Returns an IEnumerable of all RateData for all PayGrades with the specified dependents for the specified ZIP code.
        /// </summary>
        IEnumerable<RateData> GetGradeRates(bool dependents, int zipcode);

        /// <summary>
        /// Returns an IEnumerable of all RateData for all PayGrades with the specified dependents for the specified MHA.
        /// </summary>
        IEnumerable<RateData> GetGradeRates(bool dependents, string mha);

        /// <summary>
        /// Returns an IEnumerable of all RateData for all PayGrades and dependents for the specified ZIP code.
        /// </summary>
        IEnumerable<RateData> GetRates(int zipcode);

        /// <summary>
        /// Returns an IEnumerable of all RateData for all PayGrades and dependents for the specified MHA.
        /// </summary>
        IEnumerable<RateData> GetRates(string MHA);
    }
}
